package futbolfacil.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import futbolfacil.excepcion.DAOExcepcion;
import futbolfacil.modelo.Alquiler;
import futbolfacil.modelo.AlquilerDetalle;
import futbolfacil.util.ConexionBD;

public class AlquilerDAO extends BaseDAO {

	//Felix Paragulla
	public void insertar(Alquiler objAlquiler) throws DAOExcepcion {
		System.out.println("AlquilerDAO: insertar(Alquiler objAlquiler)");
		
		validarDatos(objAlquiler);		
		
		String query = "INSERT INTO alquiler(alq_nro,ALQ_FEC, ALQ_EST, USR_COD) " +
						"VALUES (?,?,1,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);		
			stmt.setInt(1, objAlquiler.getCodalquiler());
			stmt.setString(2, objAlquiler.getFechaalq());
			//stmt.setString(3, objAlquiler.getEstado());
			stmt.setInt(3, objAlquiler.getCliente().getCodigoUsuario());			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			System.out.println("Se registro correctamente \n");
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	private void validarDatos(Alquiler objAlquiler) throws DAOExcepcion {
		System.out.println("AlquilerDAO: validarDatos(Alquiler objAlquiler)");
		
		String msg = "";

		if(objAlquiler.getFechaalq().trim().equals(""))
			msg += "la fecha no puede ser vacio. \n";
		if(!msg.equals("")) {//Si exite algun error lanza excepcion
			System.out.println("Error: \n" + msg);
			throw new DAOExcepcion(msg);
		}	
	}

	public double CalcularTotal(int codigo) throws DAOExcepcion {
		
		String query = " SELECT SUM(ALQ_DET_PREC*alq_det_can) AS TOTAL FROM alquiler_detalle" +
					   " WHERE ALQ_NRO = ?";
		double total=0;
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs=null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, codigo);	
			rs=stmt.executeQuery();
			if (rs.next()){			
			 total=rs.getDouble("TOTAL");
			}						

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return total;
	}
		
	
	
	public void Alquilar (int codigoalq) throws DAOExcepcion {
		
		System.out.println("AlquilerDAO: Alquilar(Alquiler objAlquilar)");

		String query = "Update alquiler Set ALQ_EST =2, ALQ_TOT = ? "+
					   "Where ALQ_NRO = ?";
		
		//double total= CalcularTotal(objAlquilar.getCodalquiler());
		
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setDouble(1, CalcularTotal(codigoalq)) ;
			stmt.setInt(2,codigoalq);  
			int i = stmt.executeUpdate();
			if (i != 1){
				throw new SQLException("No se pudo Alquilar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public Integer CodigoMaximo() throws DAOExcepcion {
		
		String query = " SELECT MAX(ALQ_NRO)+1 as ALQ_NRO FROM alquiler ";
		int codigomax=0;
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs=null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);	
			rs=stmt.executeQuery();
			if (rs.next()){			
			 codigomax=rs.getInt("ALQ_NRO");
			}						

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return codigomax;
	}	
}
